package com.example.d8_homework.homework04;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) throws ParseException {
        /*
        需求：
        1. 已知日期字符串:"2015-10-20",将该日期字符串转换为日期对象
        2. 将(1)中的日期对象转换为日历类的对象
        3. 根据日期对象获取该日期是星期几,以及这一年的第几天
        4. 通过键盘录入日期字符串,格式(2015-10-20)
         */
        // 创建简单日期格式化对象
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        // 1.将字符串转换为日期对象
        String dateStr = "2015-10-20";
        Date date = format.parse(dateStr);

        // 2.将日期对象转成日历对象
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        // 3.获取星期几和一年中的第几天
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 一周中的第几天
        int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR); // 一年中的第几天

        // 星期几的显示调整：Java 中周日是 1,周六是 7,这里调整为周一到周日是 1 到 7
        String weekDay = getWeekDay(dayOfWeek);

        // 输出结果,按照指定格式
        System.out.printf("%s 是 %s, 是%s年的第 %d 天\n", formatDate(calendar), weekDay, calendar.get(Calendar.YEAR), dayOfYear);


        // 4.通过键盘录入日期字符串
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入日期（格式：yyyy-MM-dd）：");
        dateStr = scanner.nextLine();
        date = format.parse(dateStr); // 解析用户输入的日期字符串

        // 更新日历对象
        calendar.setTime(date);

        // 再次获取星期几和一年中的第几天
        dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);

        // 根据新的日期获取星期几
        weekDay = getWeekDay(dayOfWeek);

        // 输出信息
        System.out.printf("%s 是 %s, 是%s年的第 %d 天\n", formatDate(calendar), weekDay, calendar.get(Calendar.YEAR), dayOfYear);
    }

    /**
     * 将日历对象转成指定格式的字符串
     *
     * @param calendar 日历对象
     * @return 返回指定格式的数据
     */
    private static String formatDate(Calendar calendar) {
        // 这里的%02d表示 如果月份是1那么输出的结果就是01
        return String.format("%d年-%02d月-%02d日",
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH) + 1, // Java中月份从0开始
                calendar.get(Calendar.DAY_OF_MONTH));
    }

    /**
     * 根据从日历对象中获取的数据来判断是星期几
     *
     * @param dayOfWeek 日历对象中获取的一周中的第几天
     * @return 星期几
     */
    private static String getWeekDay(int dayOfWeek) {
        switch (dayOfWeek) {
            case Calendar.MONDAY:
                return "星期一";
            case Calendar.TUESDAY:
                return "星期二";
            case Calendar.WEDNESDAY:
                return "星期三";
            case Calendar.THURSDAY:
                return "星期四";
            case Calendar.FRIDAY:
                return "星期五";
            case Calendar.SATURDAY:
                return "星期六";
            case Calendar.SUNDAY:
                return "星期日";
            default:
                return "未知";
        }
    }
}
